const pt = require('puppeteer');
const process = require('process');

module.exports = async function (options) {
  try {
    //参数列表 optoins callback url
    const bs = await pt.launch({
      //headless: false,  无头的意思，不填默认是true。设置为true就会打开浏览器
      args: ['--no-sandbox', '--disable-setuid-sandbox'], //沙盒 沙箱 无沙盒模式
      handleSIGINT: false,
      ignoreDefaultArgs: ['--disable-extensions'],
      executablePath: '/root/.chromium-browser-snapshots/linux-722234/chrome-linux/chrome'
      //这里是线上chrome浏览器的安装路径
    }),
          pg = await bs.newPage(),
          url = options.url;
    //配置
    await pg.goto(url, {
      timeOut: 0,  //让它超时时间无穷大
      waitUtil: 'newworkidle2'
    });

    const result = await pg.evaluate(options.callback);

    //增加点击事件判断，爬取第二页
    if (result && options.field === 'course') {
      await pg.waitForSelector('.page-btn.page-last'); //await 等它才出现在页面
      await pg.click('.page-btn.page-last');
      await pg.waitFor(2000); //等待2s
      const res2 = await pg.evaluate(options.callback);
      await pg.waitFor(2000);
      //不要用concat，容易失败
      for(var i = 0; i < res2.length; i++) {
        result.push(res2[i]);
      }
    }

    await process.send(result); //发送数据给子进程

    //关闭浏览器
    await bs.close();

    setTimeout(()=> {
      process.exit(0);
    }, 1000);

  }catch(err) {
    console.log(err);
  }
}